#ifndef SOCKET_H
#define SOCKET_H

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <string>
#include <iostream>

using namespace std;
class Socket
{
protected:
    int sockfd,n;                    /**< @param sockfd es el file descriptor de nuestro socket
                                      * y @param n es donde almacenamos los <return> de @see enviar y @see recibir */
    string sbuffer;                  /**< Aquí almacenamos lo que recibimo en formato <string> */
    char *cbuffer, ccbuffer[1024];   /**< En cbufer almacenamos los char que enviamos y en ccbuffer los que recibimos */
public:
    Socket();
    void bufferChar2String(char *cbuf);
    void bufferString2Char(string sbuf);
    void print();
    void virtual checkConnection(int argc)=0;
    void virtual socket(char *argv[])=0;
    void virtual enviar(string buffer)=0;
    void virtual recibir()=0;
    string getSbuffer();
    /*funcion virtual, ya que
es diferente su implementacion segun sea de tipo UDP o TCP*/

};

void error(const char *msg);

#endif // SOCKET_H
